package dados;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import negocios.cinemaBeans.*;

public class RepositorioUsuario implements Serializable {
	private ArrayList<Usuario> arrayUsuario = new ArrayList<Usuario>();


	private static RepositorioUsuario instance;

	
	public static RepositorioUsuario getInstance(){
		instance = recuperaArquivoUsuario();
		
		if (instance == null){
				instance = new RepositorioUsuario();
		}
		return instance;
	}
	
	
	
	private RepositorioUsuario(){
		
	}



	public void adicionaUsuario(Usuario usuario){
		if(usuario.getNomeUsuario()!=null && usuario.getSenha().length()>0 && 
				usuario.getSenha()!= null && usuario.getSenha().length()>0 &&
				usuario.getTipoUsuario()!=null && usuario.getTipoUsuario().length()>0){
			
			this.arrayUsuario.add(usuario);
			gravaArquivoUsuario();
		}
	}


	public ArrayList<Usuario> listaUsuario(){
		return this.arrayUsuario;
	}


	public void removeUsuario(int indice){
		arrayUsuario.remove(indice);
		gravaArquivoUsuario();
	}

	
	protected static void gravaArquivoUsuario(){
		
		File f = new File("usuario.dat");
		
		if (!f.exists()){
			try {
				f.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		FileOutputStream faos;
		try {
			faos = new FileOutputStream(f);
			ObjectOutputStream w = new ObjectOutputStream(faos);
			w.writeObject(instance);
			w.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
	
	protected static RepositorioUsuario recuperaArquivoUsuario() {
		RepositorioUsuario clone = null;
		
		try{
			File f = new File("usuario.dat");
			FileInputStream fis = new FileInputStream(f);
			ObjectInputStream ois = new ObjectInputStream(fis);
			Object rep = ois.readObject();
			clone = (RepositorioUsuario)rep;
			ois.close();	
		} catch (FileNotFoundException e) {
			return clone;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return clone;
	}
}
